home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 January: Mac OS SDK / Dev.CD Jan 96 SDK / Dev.CD Jan 96 SDK1.toast / Development Kits (Disc 1) / AOCE / Development Tools / Sample Code / Catalog Service Access Module / DTS Sample CSAM / Src / GetRefNumFromRLI.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-07-08  |  1.4 KB  |  52 lines  |  [TEXT/KAHL]

  1. /*                                GetRefNumFromRLI.c                                */
  2. /*
  3.  * GetRefNumFromRLI.c
  4.  * Copyright © 1992-93 Apple Computer Inc. All Rights Reserved.
  5.  */
  6. #include "DTSSampleCSAM.h"
  7.  
  8. OSErr
  9. GetRefNumFromRLI(
  10.         register DTSSampleCSAMInfoPtr    infoPtr,
  11.         PackedRLI                        *packedRLI,
  12.         short                            *refNum
  13.     )
  14. {
  15.         OSErr                    status;
  16.         RLI                        rli;
  17.         CatalogInfoPtr            catalogInfoPtr;
  18.         
  19.         status = kOCENoSuchDNode;
  20.         OCEUnpackRLI(packedRLI, &rli);
  21.         if ((rli.path == NULL
  22.           || rli.path->dataLength == 0)
  23.          && (rli.dNodeNumber == kNULLDNodeNumber
  24.           || rli.dNodeNumber == kRootDNodeNumber)) {
  25.              /*
  26.               * Walk through the linked list of active (i.e., known) directories
  27.               * to find one that matches the rli. Return noErr if we find one.
  28.               */
  29.             for (catalogInfoPtr = (CatalogInfoPtr) INFO.catalogQHdr.qHead;
  30.                     catalogInfoPtr != NULL;
  31.                     catalogInfoPtr = (CatalogInfoPtr) catalogInfoPtr->qLink) {
  32.                 if (OCEEqualRString(
  33.                         (RString *) rli.directoryName,
  34.                         (RString *) &catalogInfoPtr->directoryName,
  35.                         kOCEDirName)
  36.                  && OCEEqualDirDiscriminator(
  37.                          &rli.discriminator,
  38.                          &catalogInfoPtr->discriminator)) {
  39.                     status = noErr;
  40.                     *refNum = catalogInfoPtr->refNum;
  41.                     break;
  42.                 }
  43.             }
  44.             if (status != noErr) {
  45.                 LogStatus('GRLI', status, "\pNo match to any directory");
  46.                 LogRString('GRLI', rli.directoryName);
  47.             }        
  48.         }
  49.         LogStatus('PCmd', status, "\pGetRefNumFromRLI");
  50.         return (status);
  51. }
  52.